﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Odense_Kommune.Model;
using Odense_Kommune.Interfaces;

namespace Odense_Kommune.Controller
{
    /// <summary>
    /// Klasse skrevet af Søren Eg Pedersen
    /// </summary>
    public class Systemcontroller
    {
        #region Fields
        private BorgerCollection _borgercol;
        private LeverandørCollection _leverandørcol;
        private MålgruppeCollection _målgruppecol;
        private ISpørgeskemaCol _spørgeskemacol;
        private UnderleverandørCollection _underlevcol;
        private VirkningerCollection _virkningercol;
        private VirkningerOpnåetCollection _virkningeropnåetcol;
        private DBController _dbcon;
        #endregion

        #region Konstruktør
        public Systemcontroller()
        {
            _borgercol = new BorgerCollection();
            _underlevcol = new UnderleverandørCollection();
            _leverandørcol = new LeverandørCollection();
            _dbcon = new DBController();
            _virkningercol = new VirkningerCollection();
            _målgruppecol = new MålgruppeCollection();
            _spørgeskemacol = new SpørgeskemaCollection();
        }
        #endregion

        #region Metoder

        #region Borger Metoder

        public void OpretBorger(long cpr, int alder, string fornavn, string efternavn, string kommentar, DateTime datostart, string køn, DateTime forventetafslutning)
        {
            BorgerCol.OpretBorger(cpr, alder, fornavn, efternavn, kommentar, datostart, køn, forventetafslutning);
        }

        public void OpretBorger(string kaldenavn, int alder, string kommentar, DateTime startdato, string køn, DateTime forventetafslut)
        {
            BorgerCol.OpretBorger(kaldenavn, alder, kommentar, startdato, køn, forventetafslut);
        }

        public void VælgBorger() { }

        public void SletBorger(IBorger b) { BorgerCol.SletBorger(b); }

        public IBorger RedigerBorger(IBorger b, long cpr, int alder, string fornavn, string efternavn, string kommentar, string køn, DateTime forventetafslut)
        {
            BorgerCol.RedigerBorger(b, cpr, alder, fornavn, efternavn, kommentar, køn, forventetafslut);
            return b;
        }
        #endregion

        #region Leverandør Metoder
        public void OpretLeverandør(string navn, string adresse, int postnr, string by) { LeverandørCol.OpretLeverandør(navn, adresse, postnr, by); }

        public void SletLeverandør(ILeverandør l) { LeverandørCol.SletLeverandør(l); }

        public ILeverandør RedigerLeverandør(ILeverandør l, string navn, string adresse, int postnr, string by)
        {
            LeverandørCol.RedigerLeverandør(l, navn, adresse, postnr, by);
            return l;
        }
        #endregion

        #region Målgruppe Metoder
        public void OpretMålgruppe(string beskrivelse) { MålgruppeCol.OpretMålgruppe(beskrivelse); }

        public void SletMålgruppe(IMålgruppe m) { MålgruppeCol.SletMålgruppe(m); }

        public IMålgruppe RedigerMålgruppe(IMålgruppe m, string beskrivelse)
        {
            m.Beskrivelse = beskrivelse;
            return m;
        }
        #endregion

        #region Spørgeskema Metoder
        public ISpørgeskema OpretSpørgeskema(string navn, string kommentar, string leverandør, int ID, string målgruppe, string langvirksigtetvirkning, string kortsigtetvirkning, string mellemlangvirkning, bool egenvurdering, DateTime datoforventetAfslut)
        {
            ISpørgeskema skema = new Spørgeskema();
            SpørgeskemaCol.OpretSpørgeskema(navn, kommentar, leverandør, ID, målgruppe, langvirksigtetvirkning, kortsigtetvirkning, mellemlangvirkning, egenvurdering, datoforventetAfslut);
            skema.Kommentar = kommentar;
            skema.Navn = navn;
            skema.Målgruppe = målgruppe;
            skema.ID = ID;
            skema.EgenVurdering = egenvurdering;
            skema.DatoforventetAfslut = datoforventetAfslut;
            skema.KortsigtetVirkning = kortsigtetvirkning;
            skema.LangsigtetVirkning = langvirksigtetvirkning;
            skema.MellemlangVirkning = mellemlangvirkning;
            skema.Leverandør = leverandør;

            _dbcon.OpretSkema(skema);
            return skema;
        }

        public void SletSpørgeskema(ISpørgeskema s) { SpørgeskemaCol.SletSpørgeskema(s); }

        public void HentSpørgeskemaer()
        { 
          SpørgeskemaCol =  _dbcon.HentAlleSkemaer();
        }


        public ISpørgeskema VisSpørgeskema(string navn) 
        {
            ISpørgeskema tempspørgeskema = SpørgeskemaCol.VisSpørgeskema(navn);
            return tempspørgeskema;
        }
        #endregion

        #region Underleverandør Metoder
        public void OpretUnderleverandør(string navn, string kode, long telefonnr, string email, string job, string leverandør)
        {
            UnderlevCol.OpretUnderleverandør(navn, kode, telefonnr, email, job, leverandør);
        }

        public void SletUnderleverandør(IUnderleverandør ul) { UnderlevCol.SletUnderleverandør(ul); }

        public IUnderleverandør RedigérUnderleverandør(IUnderleverandør ul, string navn, string leverandør)
        {
            UnderlevCol.RedigerUnderleverandør(ul, navn, leverandør);
            return ul;
        }
        #endregion

        #region Virkninger Metoder
        public void OpretVirkning(int forløb, string beskrivelse, int realistisk) { VirkningerCol.OpretVirkning(forløb, beskrivelse, realistisk); }

        public void SletVirkning(IVirkninger v) { VirkningerCol.SletVirkning(v); }

        public IVirkninger RedigérVirkning(IVirkninger v, int forløb, string beskrivelse, int realistisk)
        {
            VirkningerCol.RedigerVirkning(v, forløb, beskrivelse, realistisk);
            return v;
        }

        public IVirkninger VisVirkning(IVirkninger v)
        {
            VirkningerCol.VisVirkning(v); return v;
        }
        #endregion

        #region VirkningerOpnået Metoder
        public void OpretVirkningOpnået(DateTime dato, string kommentar, bool udeblev, int fagligopnået,
                                        int fagligønsket, int borgeropnået, int borgerønsket, int symptom, int funktion)
        {
            VirkningerOpnåetCol.OpretVirkningOpnået(dato, kommentar, udeblev, fagligopnået, fagligønsket,
                                                    borgeropnået, borgerønsket, symptom, funktion);
        }

        public void SletVirkningOpnået(IVirkningerOpnået vo) { VirkningerOpnåetCol.SletVirkningOpnået(vo); }

        public IVirkningerOpnået RedigérVirkningOpnået(IVirkningerOpnået vo, DateTime dato, string kommentar, bool udeblev,
                                                    int fagligopnået, int fagligønsket, int borgeropnået, int borgerønsket, int symptom, int funktion)
        {
            VirkningerOpnåetCol.RedigerVirkningOpnået(vo, dato, kommentar, udeblev, fagligopnået,
                                                        fagligønsket, borgeropnået, borgerønsket, symptom, funktion);
            return vo;
        }

        public IVirkningerOpnået VisVirkningerOpnået(IVirkningerOpnået vo)
        {
            VirkningerOpnåetCol.VisVirkningOpnået(vo);
            return vo;
        }
        #endregion
        #endregion

        #region Egenskaber
        public VirkningerOpnåetCollection VirkningerOpnåetCol { get { return _virkningeropnåetcol; } }

        public IVirkningerCol VirkningerCol { get { return _virkningercol; } }

        public IUnderleverandørCol UnderlevCol
        {
            get { return _underlevcol; }
        }
        
        public ISpørgeskemaCol SpørgeskemaCol
        {
            get { return _spørgeskemacol; }
            set { _spørgeskemacol = value;  }
        }

      //  public SpørgeskemaCollection SpørgeskemaCol { get { return _spørgeskemacol; } }

        public IBorgerCol BorgerCol { get { return _borgercol; } }

        public ILeverandørCol LeverandørCol { get { return _leverandørcol; } }

        public IMålgruppeCol MålgruppeCol { get { return _målgruppecol; } }
        #endregion
    }
}
